package admin_commerce

import (
	"gitee.com/theegg/go-brick/app/model/commerce/orders"
	"gitee.com/theegg/go-brick/app/service/app"
	"gitee.com/theegg/go-brick/app/service/help/cstruct"
	"github.com/gin-gonic/gin"
	"strconv"
)

func GetOrderList(c *gin.Context) {
	// 检验参数
	var validaParams orders.OrderQueryParams
	if err := c.ShouldBind(&validaParams); err != nil {
		app.NewResponse(c).JsonReturn(false, err.Error(), nil)
		return
	}

	// 查询数据
	data, err := orders.GetDataList(cstruct.StructToMap(validaParams))
	if err != nil {
		app.NewResponse(c).JsonReturn(false, err.Error(), data)
		return
	}

	app.NewResponse(c).JsonReturn(true, "获取数据成功", data)
	return
}

// @title GetOrderDetail
// @description 获取内容详情
func GetOrderDetail(c *gin.Context) {
	idStr := c.PostForm("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		app.NewResponse(c).JsonReturn(false, err.Error(), nil)
		return
	}

	order, errGet := orders.GetItemById(id)
	if errGet != nil {
		app.NewResponse(c).JsonReturn(false, errGet.Error(), nil)
		return
	}
	app.NewResponse(c).JsonReturn(true, "获取数据成功", order)
	return
}

// @title OrderStatus
// @description 修改 订单　状态
func OrderStatus(c *gin.Context) {
	order, err := getTargetOrderFromParams(c)
	if err != nil {
		app.NewResponse(c).JsonReturn(false, err.Error(), nil)
		return
	}

	// 动作
	action := c.PostForm("action")
	if action != "publish" && action != "un_publish" {
		action = "publish"
	}

	if action == "publish" {
		_, errPublish := order.ModifyStatus()
		if errPublish != nil {
			app.NewResponse(c).JsonReturn(false, errPublish.Error(), nil)
			return
		}

		app.NewResponse(c).JsonReturn(true, "恭喜, 上架成功", nil)
		return
	}

	if action == "un_publish" {
		_, errUnPublish := order.ModifyStatus()
		if errUnPublish != nil {
			app.NewResponse(c).JsonReturn(false, errUnPublish.Error(), nil)
			return
		}

		app.NewResponse(c).JsonReturn(true, "恭喜, 下架成功", nil)
		return
	}
}

/** =========================== 辅助查询 ============================ **/
// @title getTargetOrderFromParams
// @description 内置方法　通过参数id获取目标对象
func getTargetOrderFromParams(c *gin.Context) (*orders.Orders, error) {
	id := c.PostForm("id")
	if id == "" {
		return nil, app.NewError("对不起, 管理员ID不能为空")
	}

	// ID 转换格式
	int64Id, errParse := strconv.ParseInt(id, 10, 64)
	if errParse != nil {
		return nil, app.NewError("对不起, 目标用户ID格式不正确")
	}

	// 获取对象
	item, errTarget := orders.GetItemById(int64Id)
	if errTarget != nil {
		return nil, app.NewError(errTarget)
	}

	// 目标需要存在
	if item == nil {
		return nil, app.NewError("对不起, 目标不存在")
	}

	return item, nil
}
